package br.com.estevam.gallery.command;

import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import br.com.estevam.gallery.data.ImagemData;
import br.com.estevam.gallery.tools.DBConnection;
import br.com.estevam.gallery.tools.Util;

public class InsereImagem {

	public static void main(String[] args) {
		InsereImagem insert = new InsereImagem();
		String[] nomeArr = {
				"Balance_Wallpaper_by_nxxos.jpg"
//				"antonio/ant mostro2.JPG",
//				"wallpaper/NATURE-SunsetBlissII_1600x1200.jpg",
//				"wallpaper/blueswirl.png",
//				"myubuntu/Captura_de_tela123.jpg",
//				"myubuntu/Captura_de_tela.png",
//				"antonio/ant mostro.JPG",
//				"experience/Awstats-Logo.png",
//				"experience/moodle-desktop.jpg",
//				"experience/PhpPgMyAdmin.jpg",
//				"experience/webmin.jpg"
			};
		String[] descricaoArr = {
				"Balance_Wallpaper_by_nxxos"
//				"Antonio Monstro 2",
//				"NATURE SunsetBlissII 1600x1200",
//				"Blueswirl",
//				"Meu tela de ubuntu 002",
//				"Meu tela de ubuntu 001",
//				"Antonio Monstro", 
//				"Awstats 6.8", 
//				"Moodle Desktop",
//				"PhpPgAdmin for Postgresql",
//				"WebMin"
			};
		
		for(int i = 0; i < nomeArr.length; i++){
			try {
				insert.imagens(nomeArr[i], descricaoArr[i]);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	
	public void gravar(ImagemData dadosImagem, Object imagens) throws ClassNotFoundException, SQLException, IllegalAccessException, InstantiationException{
		Connection con = DBConnection.getConnection();
		String sql = "insert into imagens (nome, descricao, md5sum, tamanho, imagem) values (?,?,?,?,?)";
		
		PreparedStatement stmt = con.prepareStatement(sql);
		stmt.setString(1, dadosImagem.getNome());
		stmt.setString(2, dadosImagem.getDescricao());
		stmt.setString(3, dadosImagem.getMd5sum());
		stmt.setInt(4, dadosImagem.getTamanho());
		stmt.setObject(5, imagens);
		
		stmt.executeUpdate();
		stmt.close();
	}
	
	public boolean isExisteImagem(ImagemData dadosImagem) throws ClassNotFoundException, SQLException, IllegalAccessException, InstantiationException {
		Boolean existente = false;
		Connection con = DBConnection.getConnection();
		String sql = "select md5sum from imagens where md5sum = ?";
		
		PreparedStatement stmt = con.prepareStatement(sql);
		stmt.setString(1, dadosImagem.getMd5sum());
				
		ResultSet rs = stmt.executeQuery();
		if(rs.next())
			existente = true;
		
		rs.close();
		stmt.close();
		
		return existente;
	}
	
	public void imagens(String nome, String descricao) throws Exception {
		ImagemData dadosImagem = new ImagemData();
		//String myDirectory = "/home/ehsilva/java/projetos/gallery/src/main/java/br/com/estevam/gallery/command/";
		String myDirectory = "/home/ehsilva/Imagens/";
		String nomeFile = myDirectory + nome;

		// Lê a imagem para um byte[]
		File img = new File(nomeFile);
		byte[] imagem = new byte[(int) img.length()];
		
		DataInputStream is = new DataInputStream(new FileInputStream(nomeFile));
		is.readFully(imagem);
		is.close();
		
		dadosImagem.setNome(img.getName());
		dadosImagem.setDescricao(descricao);
		dadosImagem.setTamanho((int) img.length());
		dadosImagem.setMd5sum(Util.encrypt(imagem, "MD5"));

		// Verifica e Conecta ao banco e insere a imagem
		if(!isExisteImagem(dadosImagem)){
			gravar(dadosImagem, imagem);
			//Finaliza o programa
			System.out.println("Lendo " + img.length() + " bytes... Imagem " + img.getName() + " foi acrescentada ao banco!");
		} else {
			//Finaliza o programa
			System.out.println("Lendo " + img.length() + " bytes... Imagem " + img.getName() + " foi duplicado!");
		}

	}
}
